查看原文
其他

DataV 核心揭密(二):三维模型那些事儿

鹿山 DataV数据可视化 2022-11-24


模型的常见困惑

为什么网上的三维模型那么便宜?买来的三维模型能不能用?

  • 网上很多售价非常低廉的三维城市模型,通常用途不是为了三维实时引擎渲染用的,而是作为离线渲染宣传视频用;这些模型的流通渠道并不正规,所以价格便宜
  • 这些建模建模的时候没有考虑实时渲染的场景,通常体积巨大,无法在数字孪生这种实时渲染的场景下使用
  • 如果要强行优化、轻量化此类模型,成本可能比重建还高;因此不建议在网上购买低价三维模型

为什么其他现成专业三维软件的三维模型不能用?

  • 三维模型是一个非常宽泛的概念,数字孪生业务场景涉及的模型往往特指某类实时渲染引擎可以使用的三维模型格式;数字孪生三维引擎能支持的三维模型格式只是一部分
  • 有很专业的行业软件也生成三维模型,比如Revit、ProE等等;此类三维软件往往是用于计算机辅助制造、建筑设计,生成的三维模型体积巨大、构件复杂、数据结构复杂,需要专门的处理才能导出数字孪生三维引擎能使用的格式
  • BIM模型通常是当做三维空间数据源对待,而不是单纯的三维模型;需要有专门是数据工作流程,将BIM模型处理为轻量化三维展示模型和空间关系数据,再进入三维渲染引擎使用
为什么不能全城手工建模?
  • 规范的三维模型是需要建设成本的,全城建模的成本异常高
  • 全城手工建模的模型体量也是异常巨大,渲染引擎一般无法全部渲染
  • 全城实景建模通常采用倾斜摄影这样更加自动化的智能建模手段




什么样的三维模型

才能用在数字孪生项目里?

01 三维模型主流格式和生成工具

1. 主流三维模型类型

  • 手工模型
    • 通用三维模型(游戏、影视用途):常规三维建模软件如3dmax\maya\c4d等产出模型,通常包括丰富细节的几何体和精美的贴图;此类模型是最常见的三维模型,通常不要求与真实世界完全对应,可能在建模过程中有一定的艺术性夸张;这类模型通常格式包括obj\fbx\dae\collada\stl\gltf等等;此类模型通常可以直接被引擎使用
    • 专用三维模型(BIM、CAD等用途):通常用于建筑\工业等行业的专业模型,比如BIM模型等,特点是包含了非常真实且细节化的几何构件,而且构件都会标注详细的属性数据;此类模型体积通常非常巨大,展示渲染相对不太方便,需要进行格式转换才能被常规三维引擎使用;这类模型通常格式包括dwg\rvt等等;此类模型通常需要进行格式转换、轻量化、构件/属性数据分离、三维切片等加工之后再被引擎使用
  • 自动建模模型
    • 点云:激光扫描生成的模型,特点是可以将真实的物体位置\外观作为模型顶点保存下来;缺陷是模型非常大,而且缺乏模型的语义化分割;这类模型通常格式包括ply\pcd等等;此类模型通常需要进行切片加工,以流式加载的形式进入渲染引擎
    • 倾斜摄影:利用航空光学设备对物体进行多角度拍摄,并进行三维模型重建,将真实场景图片进行贴图;特点是场景还原非常真实,通常模型比较大,而且缺乏模型的语义化分割;这类模型通常格式包括osgb等等;此类模型通常需要进行切片加工,以流式加载的形式进入渲染引擎
  • 模型格式的转换与统一
    • 通常渲染引擎会有偏好的三维模型格式,以利于数据的规范化与业务数据融合
    • 以WebGL引擎为例,所有三维模型最终的渲染格式几乎都可以转换为gltf格式,再进入引擎渲染管线进行渲染

2. 渲染场景分类

  • 离线渲染
    • 将模型用于影视\动画渲染等视频制作,通常渲染质量非常高,缺陷是渲染时间非常长,渲染单帧需要几分钟甚至几个小时;通用使用maya\blender等三维建模软件进行渲染;主要产出是视频,渲染内容无法进行实时更改
    • 通常maya、c4d等建模软件加上一些专用的渲染器插件,用于电影、广告等视频的渲染
  • 实时渲染
    • 将模型用于游戏\数字孪生等强交互的三维引擎渲染,用于游戏开发、数字城市等等应用;渲染的内容可以实时调整
    • 游戏引擎、GIS引擎、数字孪生引擎一般都是实时渲染引擎


3. 常用的三维实时渲染引擎

三维模型通常会进入三维引擎进行实时渲染,按常见的应用场景可以分成三大类:

  • 游戏引擎:用于游戏开发、互动开发的引擎,常见的如UE4、Unity、寒霜,以及游戏大厂的内部引擎等等
  • GIS引擎:用于地理空间数据查看、分析的三维引擎,常见的如ArcGis、Google Earth、百度三维地图、cesium.js、Mapbox等等
  • 数字孪生引擎:近几年兴起的专门适用于数字孪生行业场景的三维引擎,如阿里云DataV.CityPro


02 如何评价通用三维模型的质量?(专业模型如BIM/CAD除外)

1. 艺术角度

  • 美观度:主管上感受是否美观
  • 设计工作流是否规范
    • 是否采用规范的PBR工作流进行制作贴图;如果工作流不规范,那在渲染引擎中模型的呈现和三维建模软件中会有很大的差距
    • 几何体构面、法线、uv等是否规范合理;如何几何数据不规范,在渲染引擎中的光影效果、贴图效果会受到很大影响

2. 技术角度

  • 面数是否合理:面数越多渲染性能越差,在满足视觉的情况下,模型三角面数越少越好;
  • 比例是否正确,上方向是否正确:建议按真实世界比例进行建模,Y+为上方向
  • 必要属性是否完备:
    • 几何体ID:模型与点击交互等识别的数据
    • 动画ID:具备动画的模型,用于调用特定的动画片段


03 如何把三维模型的空间数据与业务数据进行融合?

  • 三维模型与业务数据需要有统一的坐标参考系,比如都是基于真实的地理坐标参考系,并且是按真实世界的空间大小进行建模
  • 三维渲染引擎需要支持良好的地理坐标参考系,比如对二三维一体真实的地理坐标系支持
  • 三维模型需要有挂载业务数据的能力,比如模型的构件需要有唯一辨识ID,并且有良好的属性描述,才能与业务数据进行融合、互动;这就需要大量应用BIM模型






基于 WebGL 的数字孪生引擎

需要什么模型格式?

01 最适用于WebGL引擎的模型格式:gltf

  • gltf格式:glTF格式的模型是目前主流推荐的Web 3D模型格式,glTF格式为3D内容的数据格式提供统一的标准、互联网方便传输、浏览器高效渲染
  • gltf实用工具
    • gltfViewer查看器,检查模型是否能够被浏览器正常渲染;下载地址:https://github.com/donmccurdy/three-gltf-viewer/releases
    • fbx2gltf 转换工具,将fbx模型转换为gltf格式;下载地址:https://github.com/facebookincubator/FBX2glTF
    • blender建模工具,原生支持gltf模型导出;下载地址:https://www.blender.org/download/


02 使用gltf格式模型常见的问题

模型本身有问题 

   - 症状:加载报错或者无法显示

   - 排查工具:用 gltfViewer 查看是否能正常渲染,如果不能,则模型有问题

   - 解决办法:用建模软件重新导出


模型比例有问题

   - 症状:用gltfViewer查看能正常渲染,三维引擎无法显示

   - 排查工具:在建模软件里面查看模型比例是否与真实世界一致,3米高的楼建模也需要3米高

   - 解决办法:导出模型按真实比例导出,并将视角缩放到合适位置


模型位置有问题

   - 症状:用 gltfViewer 查看能正常渲染,三维引擎无法显示

   - 排查工具:检查镜头焦点是否和模型放置的地理位置接近

   - 解决办法:将模型放置在正确的地理位置,并调整合适的镜头视角


模型性能有问题

   - 症状:模型体积较大,三维引擎渲染非常卡顿;或者显存不够崩溃

   - 排查工具:打开chrome浏览器,查看帧率比较低,显存占用高

   - 解决办法:1、换用更好的显卡;2、将模型重新处理,减少面数;3、单独处理贴图,缩小分辨率,如2k降为1k,减少显存开销






基于 DataV.CityPro 引擎

三维模型交互实践


这里只讨论常规三维模型的使用,专业三维模型如 BIM /倾斜摄影等在后续系列专题中详细讨论

01 DataV.CityPro  模型加载器的功能

DataV.CityPro 模型加载器针对模型的交互主要有以下功能:

  • 模型展开:将模型的单个构件进行移动操作
  • 模型分组展开:将模型的多个构件进行移动操作
  • 材质渐变:覆盖某些构件的材质,如高亮颜色等等
  • 模型动画:调用gltf模型中的动画片段
  • 路径动画:将模型按路径进行移动

02 模型的动画调用

step 1:在DataV中添加“城市三维构建器”和“Tab列表”两个组件,“Tab列表”用于控制gltf模型动画的状态
step 2:“城市三维构建器” 中添加 “模型加载器” 用于加载gltf模型,并设置好模型的地理位置在相机的视野之内


step 3:在蓝图中调用 gltf 模型动画


step 4:查看效果



03 路径动画:让模型按三维空间的轨迹移动
step 1:在蓝图中调用路径动画


step 2:查看效果


04 模型分组展开:部件的操纵

模型加载器组件中“模型展开”、“模型分组展开”两个方法的区别是:“模型展开”针对一个对象(mesh对象/成组的对象),“模型分组展开”针对一组对象(mesh对象/成组的对象)

step 1:建模时对需要操作的构件分别进行命名,分开操作的构件需要是独立的mesh对象;支持成组的对象
step 2:在蓝图中调用gltf模型动画:使用蓝图的数据处理节点


step 3:查看效果



05 材质渐变

step 1:在蓝图中调用 gltf 模型动画:使用蓝图的数据处理节点调用模型加载器的"材质渐变"方法


step 2:查看效果


06 模型点击交互

step 1:在蓝图中监听模型交互行为,传递给其他任意组件动作即可


结语
三维模型是一个很宽泛的概念,大部分三维模型是无法直接应用于数字孪生项目的,合理的规范制定 + 严格的质量把控 + 合适的数字孪生引擎选型,才能发挥三维模型最大的效果。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存